package cn.alex.sso.project.sync;

import cn.alex.sso.project.sync.entity.DataSyncEntity;
import cn.alex.sso.project.sync.module.DataSyncModule;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

/**
 * 定义数据同步模块获取服务
 *
 * @author Alex
 * @date 2024/12/1 04:00
 */
@Service
public class DataSyncModuleService {
    private final Map<String, DataSyncModule> moduleMap;


    @Autowired
    private DataSyncModuleService(ApplicationContext context) {
        this.moduleMap = context.getBeansOfType(DataSyncModule.class);
    }

    /**
     * 获取所有数据同步模块接口实现类
     *
     * @return 数据同步模块接口实现类
     */
    private List<DataSyncModule> getAllDataSyncModule() {
        return new ArrayList<>(moduleMap.values());
    }

    /**
     * 获取所有数据同步模块
     *
     * @return 数据同步模块
     */
    public List<DataSyncEntity> getModuleList() {
        return getAllDataSyncModule().stream().map(DataSyncModule::getModule).collect(Collectors.toList());
    }

    /**
     * 获取所有数据同步模块信息
     *
     * @return 数据同步模块信息
     */
    public List<Map<String, Object>> getInfo() {
        return getAllDataSyncModule().stream().map(DataSyncModule::getInfo).collect(Collectors.toList());
    }
}
